import java.util.Deque;
import java.util.LinkedList;

public class Num2379 {
    //给你一个长度为 n下标从 0开始的字符串blocks，blocks[i]要么是'W'要么是'B'，表示第i块的颜色。字符'W' 和'B'分别表示白色和黑色。
    //给你一个整数k，表示想要连续黑色块的数目。
    //每一次操作中，你可以选择一个白色块将它 涂成黑色块。
    //请你返回至少出现 一次连续 k个黑色块的 最少操作次数。
    public int minimumRecolors(String blocks, int k) {
        Deque<Character> deque = new LinkedList<>();
        char[] chars = blocks.toCharArray();
        int bNum = 0;
        int min = 0;
        for (int i = 0; i < k; i++) {
            deque.offer(chars[i]);
            if (chars[i] == 'B') {
                bNum++;
            }
        }
        if (bNum == k) return 0;
        min = k - bNum;
        for (int i = k; i < chars.length; i++) {
            char c = deque.pollFirst();
            if (c == 'B') bNum--;
            deque.offer(chars[i]);
            if (chars[i] == 'B') {
                bNum++;
            }
            min = Math.min(min,k - bNum);
        }
        return min;
    }
}
